/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bgu.ppm.sim.api.mas;

import bgu.ppm.sim.api.exec.TickBasedExecutionSystem;
import bgu.sonar.util.ui.mon.Monitor;
import java.util.Collection;

/**
 *
 * @author User
 */
public interface MultiAgentSystem<M extends Model> {

    M getGlobalModel();

    Mailer getMailer();

    TickBasedExecutionSystem getExecutionSystem();

    AgentFactory getAgentFactory();

    TerminationCondition getTerminationCondition();

    void register(MASModule module);

    <T extends MASModule> Collection<T> getRegisteredModules(Class<T> type);

    void process(M model, Monitor m);
}
